﻿#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>

//int main()
//{
//	int num = -10;
//	int n = num << 1;
//	//原码  10000000000000000000000000001010
//	//反码  11111111111111111111111111110101
//	//补码  11111111111111111111111111110110
//	//<< 1  11111111111111111111111111101100
// //取反+1 10000000000000000000000000000100
//	printf("n= %d\n", n);//-20
//	printf("num= %d\n", num);
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int num = -10;
//	int n = num >> 1;
//	//原码  10000000000000000000000000001010
//	//反码  11111111111111111111111111110101
//	//补码  11111111111111111111111111110110
//	//>> 1  11111111111111111111111111111011
//   //取反+1 10000000000000000000000000000101
//	printf("n= %d\n", n);//-5
//	printf("num= %d\n", num);
//	return 0;
//}

//
//int main()
//{
//	int a = 10;
//	int b = a << -1;
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	int b = -10;
//	int c;
//	
//	int i = 0;
//	for ( i = 0; i < 4; i++)
//	{
//		c = a << i;
//		printf("%d ", c);
//		
//	}
//	printf("\n");
//	for ( i = 0; i < 4; i++)
//	{
//		c = b << i;
//		printf("%d ", c);
//	}
//	printf("\n");
//	for (int i = 0; i < 4; i++)
//	{
//		c = a >> i;
//		printf("%d ", c);
//
//	}
//	printf("\n");
//	for ( i = 0; i < 4; i++)
//	{
//		c = b >> i;
//		printf("%d ", c);
//	}
//	return 0;
//}
//
//#include <stdio.h>
//int main()
//{
//	//0  00000000000000000000000000000000
//	//~0 11111111111111111111111111111111
//
//	printf("%d\n", ~0);//-1
//	return 0;
//}


//
//#include <stdio.h>
//int main()
//{
//	int num1 = -3;
//	int num2 = 5;
//	printf("%d\n", num1 & num2);
//	printf("%d\n", num1 | num2);
//	printf("%d\n", num1 ^ num2);
//	printf("%d\n", ~0);
//	return 0;
//}

//
//#include <stdio.h>
//int main()
//{
//	int a = 10;
//	int b = 20;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("a = %d b = %d\n", a, b);
//	return 0;
//}


////⽅法1
//#include <stdio.h>
//int main()
//{
//	int num = 10;
//	int count = 0;//计数
//	while (num)
//	{
//		if (num % 2 == 1)
//			count++;
//		num = num / 2;
//	}
//	printf("⼆进制中1的个数 = %d\n", count);
//	return 0;
//}

////⽅法2：
//#include <stdio.h>
//int main()
//{
//	int num = -1;
//	int i = 0;
//	int count = 0;//计数
//	for (i = 0; i < 32; i++)
//	{
//		if (num & (1 << i))
//			count++;
//	}
//	printf("⼆进制中1的个数 = %d\n", count);
//	return 0;
//}


//⽅法3：
#include <stdio.h>
int main()
{
	int num = -1;
	int i = 0;
	int count = 0;//计数
	while (num)
	{
		count++;
		num = num & (num - 1);
	}
	printf("⼆进制中1的个数 = %d\n", count);
	return 0;
}